// 班级表
import { defineStore } from 'pinia';

// 1. 定义班级对象的接口
interface sysClassList {
    id?: number | null; // 班级 ID
    teacherId?: number | null; // 教师 ID
    teacherName?: string;
    className?: string; // 班级名称
    studentId?: number[]; // 学生 ID 数组
    studentName?: string[];
}



export const useSysClassStore = defineStore('sysClass', {
    // 2. state 的类型定义
    state: (): { sysClassList: sysClassList[] } => ({
        sysClassList: [], // 初始化为空数组，存储所有班级
    }),

    getters: {
        /**
         * 根据传入的条件对象，筛选出所有匹配的试题
         * 修正后的版本
         */
        findPapersByConditions: (state) => {
            return (query: Partial<sysClassList>): sysClassList[] => {
                // 1. 从 query 对象中过滤出有效（非空、非 undefined）的查询条件
                const activeConditions = Object.entries(query).filter(
                    ([_, value]) => value !== null && value !== undefined && value !== ''
                );

                // 如果没有任何有效条件，则返回空数组
                if (activeConditions.length === 0) {
                    return [];
                }

                // 2. 使用数组的 filter 方法筛选试题
                return state.sysClassList.filter(paper => { // 修正点1: 使用 state 而不是 this
                    // 3. 使用数组的 every 方法，确保试题对象满足所有 activeConditions
                    return activeConditions.every(([key, value]) => {
                        // 4. 执行匹配
                        return String(paper[key as keyof sysClassList]) // 修正点2: 使用 paper 而不是 user
                            .toLowerCase()
                            .includes(String(value).toLowerCase());
                    });
                });
            };
        },


        /**
         * 根据班级 ID 获取单个班级的详细信息
         * @param id - 班级 ID
         * @returns 找到的班级对象，如果未找到则返回 undefined
         */
        getClassById: (state) => (id: number) => {
            return state.sysClassList.find((cls) => cls.id === id);
        },

        /**
         * 获取所有班级列表
         * @returns 班级对象数组
         */
        getAllClasses: (state) => state.sysClassList,

        /**
         * 根据学生id 获取所有班级列表
         *
         * @param state - 状态对象
         * @param studentId - 学生 ID
         * @returns 找到的班级对象数组，如果没有找到则返回空数组
         */
        getClassesByStudentId: (state) => (studentId: number) => {
            return state.sysClassList.filter((cls) => cls.studentId?.includes(studentId));
        },
    },

    actions: {
        /**
         * 添加一个新班级
         * @param newClass - 要添加的班级对象（不包含 id）
         * @returns 新创建的班级对象（包含生成的 id）
         */
        addClass(newClass: Omit<sysClassList, 'id'>): sysClassList {
            const newId = this.sysClassList.length > 0
                ? Math.max(...this.sysClassList.map(c => c.id ?? 0)) + 1
                : 1;

            const classToAdd: sysClassList = {
                id: newId,
                ...newClass,
            };

            this.sysClassList.push(classToAdd);
            console.log('班级添加成功:', classToAdd);
            return classToAdd;
        },

        /**
         * 根据班级 ID 删除班级
         * @param id - 要删除的班级 ID
         * @returns 是否删除成功
         */
        deleteClass(id: number): boolean {
            const index = this.sysClassList.findIndex((cls) => cls.id === id);
            if (index !== -1) {
                this.sysClassList.splice(index, 1);
                console.log(`ID 为 ${id} 的班级已删除`);
                return true;
            } else {
                console.warn(`删除失败: 未找到 ID 为 ${id} 的班级`);
                return false;
            }
        },

        /**
         * 更新一个已存在的班级信息
         * @param updatedClass - 包含要更新数据的班级对象（必须包含 id）
         * @returns 是否更新成功
         */
        updateClass(updatedClass: sysClassList): boolean {
            if (!updatedClass.id) {
                console.error('更新失败: 提供的班级对象缺少 ID');
                return false;
            }

            const index = this.sysClassList.findIndex((cls) => cls.id === updatedClass.id);
            if (index !== -1) {
                // 使用展开运算符创建新对象，确保响应式更新
                this.sysClassList[index] = { ...this.sysClassList[index], ...updatedClass };
                console.log('班级信息更新成功:', this.sysClassList[index]);
                return true;
            } else {
                console.warn(`更新失败: 未找到 ID 为 ${updatedClass.id} 的班级`);
                return false;
            }
        },

        /**
         * 获取所有班级列表 (Getter 的替代方案，有时在 Actions 中获取更方便)
         * @returns 所有班级的数组
         */
        fetchClasses(): sysClassList[] {
            // 在实际应用中，这里可能会调用 API 从服务器获取数据
            // 例如: const response = await api.get('/classes');
            //        this.sysClassList = response.data;
            console.log('获取所有班级列表');
            return this.sysClassList;
        },

        /**
         * 根据教师 ID 查找其负责的所有班级
         * @param teacherId - 教师 ID
         * @returns 该教师负责的班级数组
         */
        getClassesByTeacherId(teacherId: number): sysClassList[] {
            return this.sysClassList.filter((cls) => cls.teacherId === teacherId);
        },
    },

    // 持久化配置
    persist: true,
});
